package week4.exer01;

import java.util.Scanner;

/**
 * 实验题目:装错信封
 * 题目描述：
 * 组合学中有这样一个问题：某人给五个朋友写信，邀请他们来家中聚会。请柬和信封交由助手去处理。粗心的助手却把请柬全装错了信封。请问：助手会有多少种装错的可能呢？
 * 这个问题是是由当时有名的数学家约翰·伯努利(Johann Bernoulli，1667—1748)的儿子
 * 丹尼尔·伯努利(Danid Bernoulli，17OO一1782)提出来的。
 *
 * 输入要求：
 * 输入数据包含多个多个测试实例，每个测试实例占用一行，每行包含一个正整数n（1<n<=10），n表示朋友的人数。
 * 输出要求：
 * 对于每行输入请输出可能的错误方式的数量，每个实例的输出占用一行。
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            long[] dp = new long[n + 1];
            if (n == 1) {
                System.out.println(0);
                continue;
            }
            if (n == 2) {
                System.out.println(1);
                continue;
            }
            dp[1] = 0;
            dp[2] = 1;
            for (int i = 3; i <= n; i++) {
                dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]);
            }
            System.out.println(dp[n]);
        }
    }
}
